'''
标识符，即命名的要求.
1.首字符必须是字母或下划线
2.其他部分由字母、数字和下划线组成
3.对大小写敏感
4.可以使用中文，但尽量不用
5.不能与关键字同名
'''

'''错误示范
1sa = '1'
s%%2 = '2'

大小写敏感
s = '1'
S = '2'
会产生两个变量
'''

'''
python 保留字，也可以说是关键字
import keyword
keyword.kwlist
可以输出当前版本所有的关键字
'''

'''
python对于缩进的要求很严格，别的语言如java通过是靠括号来限制，而python是靠缩进来严格控制
而且python的执行是逐行来执行的
'''

'''
如果一行写不完一条语句，可以使用反斜杠 \来实现多条语句

如name = '我是杨旋，我喜欢打篮球'   ，
可以表示为  name = '我是杨旋\
，我喜欢打篮球'
'''

'''
python3 有6个标准的数据类型:
Number(数字)(不可变)
String(字符串)(不可变)
Tuple(元组)(不可变)
List(列表)(可变)  []
Set(集合)(可变)
Dictionary(字典)(可变)
此处不可变是地址不可改变。如下，可以改变值，但是地址却不一样了。而元组直接不能改变，连值都不行
a = 12
id(a)
Out[8]: 2028602878608
a = 13
id(a)
Out[10]: 2028602878640
s = '123'
id(s)
Out[12]: 2028645034992
s = '12'
id(s)
Out[14]: 2028645380336
'''

'''
字符串的切取，
str = '12345689'
str[0:3]  取012 ，含头不含尾。
str[0:-1]  -1可当作最后一位，含头不含尾，即从0到倒数第二位
str[0:] 这便可取完
'''

'''
如果不想反斜杠\发生转义，可以在字符串前面添加一个r，表示原始字符串 
print('Ru\noob')
Ru
oob
print(r'Ru\noob')
Ru\noob
'''

'''
元组  ()
当元组只包含一个元素的时候，需要在元素后面添加逗号,否则括号会被当作运算符使用

tup1 = (4)
type(tup1)
Out[20]: int
tup1 = (4,)
type(tup1)
Out[22]: tuple


元组中的元素值不允许修改，但是可以对元组进行连接组合，而且元组的元素值不允许被删除，但是可以使用del语句来删除整个元组
'''

'''
字典主要是遍历
for k in dic1.keys():
    print(k)

for v in dic1.values():
    print(v)

for k,v in dic1.items():
    print(k,v)

for (k1,v1),(k2,v2) in zip(dic1.items(),dic2.items()):
    print(k1,v1)
    print(k2,v2)

索引位置和对应值
for i,v in enumerate(dic.items()):
    print(i,v)
字典中的键必须不可变，因此可以用数字，字符串，元组充当，其余不行
'''

'''
类型转换，分隐式和显式
隐式即电脑自动帮你转换，显示即需你手动 如int(1.23) , str(1.23)
'''

'''
列表推导式
nums = [2,55,22,16,78,36.2]
nums_gt15=[num for num in nums if num>15]
nums_gt15
Out[28]: [55, 22, 16, 78, 36.2]
'''

'''
三元运算符
max = a if a>b else b 
'''

'''
python 函数的参数传递，对于不可变类型，传递的只是值，并不影响对象本身，而可变类型如列表，字典，传过去后
修改后其本身也被影响

传递多个值  参数带一个* ， 以元组的形式导入
def printinfo(name,*infos):
    print(name)
    for info in infos:
        print(info)
    return
printinfo('yx')
yx
printinfo('nihao','sss',23)
nihao
sss
23

参数带2个型号 ** 以字典的形式导入
def printinfo(name,**infos):
    print(name)
    print(infos)
    return
printinfo('yx',sex='man',danshen='no')
yx
{'sex': 'man', 'danshen': 'no'}

同时使用* 和** 必须*在**前面，否则会报错
'''